/**
 * 有关request和response的设置
 */

import axios from "axios";
import {Message} from "element-ui";
import {getToken} from "@/utils/cookie";

/**
 * 创建axios实例
 * @type {AxiosInstance}
 */
const service = axios.create({
    /**
     * baseURL：请求的域名（后端提供的根域名）
     */
    // baseURL: 'http://39.101.67.148:2410/',
    baseURL: 'http://localhost:2410/',
    /**
     * timeout：请求超时时长，单位ms
     */
    timeout: 20000
});

/**
 * request拦截器，在请求被处理签拦截它们
 */
service.interceptors.request.use(
    /**
     * 发出请求前的处理
     * @param config
     */
    config => {
        if (getToken()) {
            /**
             * 请求头设置自带token
             * @type {*}
             */
            config.headers['Authorization'] = getToken();
        }
        /**
         * 请求的格式设置为JSON格式
         * @type {string}
         */
        config.headers['Content-Type'] = 'application/json';

        return config;
    },
    error => {
        /**
         * Promise是一个异步操作，可以用来执行一些异步操作（异步操作不能直接 return 接收执行结果，只能通过回调来接收）
         * reject()：执行失败调用的回调函数
         */
        Promise.reject(error);
    }
)

service.interceptors.response.use(
    /**
     * 请求成功对相应数据做处理
     * @param response
     */
    response => {
        return response.data;
    },

    /**
     * 响应错误处理
     * @param error
     */
    error => {
        const code = error.response.data.status;
        if (!code) {
            Message({
                type: 'error',
                message: '接口请求失败'
            })
        }
        return Promise.reject(error);
    }
)

/**
 * 通过export方式导出，在导入时要加{ }，export default则不需要，并可以起任意名称
 */
export default service;
